package model

import (
	"gorm.io/gorm"
	"smart-health-platforms/config"
	"time"
)

type Order struct {
	Id         uint32         `gorm:"column:id;type:int UNSIGNED;comment:订单ID;primaryKey;not null;" json:"id"`                                                         // 订单ID
	OrderSn    string         `gorm:"column:order_sn;type:varchar(255);comment:订单号;not null;" json:"order_sn"`                                                         // 订单号
	UserId     uint32         `gorm:"column:user_id;type:int UNSIGNED;comment:用户id;not null;" json:"user_id"`                                                          // 用户id
	GoodskuId  int32          `gorm:"column:goodSku_id;type:int;comment:商品id;not null;" json:"goodSku_id"`                                                             // 商品id
	AddressId  int32          `gorm:"column:address_id;type:int;comment:商品地址id;not null;" json:"address_id"`                                                           // 商品地址id
	RealName   string         `gorm:"column:real_name;type:varchar(32);comment:用户姓名;not null;" json:"real_name"`                                                       // 用户姓名
	UserPhone  string         `gorm:"column:user_phone;type:varchar(18);comment:用户电话;not null;" json:"user_phone"`                                                     // 用户电话
	TotalNum   uint32         `gorm:"column:total_num;type:int UNSIGNED;comment:订单商品总数;not null;default:0;" json:"total_num"`                                          // 订单商品总数
	TotalPrice float64        `gorm:"column:total_price;type:decimal(10, 2) UNSIGNED;comment:订单总价;not null;default:0.00;" json:"total_price"`                          // 订单总价
	PayStatus  uint8          `gorm:"column:pay_status;type:tinyint UNSIGNED;comment:支付状态:1:待支付,2:支付完成,3:支付取消,4:已完成;not null;default:1;" json:"pay_status"`            // 支付状态:1:待支付,2:支付完成,3:支付取消,4:已完成
	PayType    string         `gorm:"column:pay_type;type:varchar(32);comment:支付方式:1:支付宝,2:微信,3:银行卡;not null;" json:"pay_type"`                                        // 支付方式:1:支付宝,2:微信,3:银行卡
	CreatedAt  time.Time      `gorm:"column:created_at;type:datetime(3);comment:创建时间;not null;" json:"created_at"`                                                     // 创建时间
	UpdatedAt  time.Time      `gorm:"column:updated_at;type:datetime(3);comment:修改时间;not null;" json:"updated_at"`                                                     // 修改时间
	DeletedAt  gorm.DeletedAt `gorm:"column:deleted_at;type:datetime(3);comment:删除时间;default:NULL;" json:"deleted_at"`                                                 // 删除时间
	Status     int8           `gorm:"column:status;type:tinyint(1);comment:订单状态（-1 : 申请退款 -2 : 退货成功 1：待发货；2：待收货；3：已收货；4：待评价；5：已退款）;not null;default:1;" json:"status"` // 订单状态（-1 : 申请退款 -2 : 退货成功 1：待发货；2：待收货；3：已收货；4：待评价；5：已退款）
}

func (o *Order) TableName() string { //表名
	return "order"
}

func (o *Order) CreateOrder() error { //创建订单
	return config.DB.Create(&o).Error
}

func (o *Order) GetByOrderId(id int) error { //根据订单id获取订单信息
	return config.DB.Where("id = ?", id).Limit(1).Find(&o).Error
}
func (o *Order) GetByOrderOrderNo() error { //根据订单id获取订单信息
	return config.DB.Where("order_sn = ?", o.OrderSn).Limit(1).Find(&o).Error
}

func (o *Order) GetOrderId() error { //根据用户id获取订单信息
	return config.DB.Where("user_id = ?", o.UserId).Where("id = ?", o.Id).Find(&o).Error
}

func (o *Order) DeleteOrder() error { //删除订单
	return config.DB.Where("id = ?", o.Id).Delete(&o).Error
}
func (o *Order) UpdateOrderPay(tx *gorm.DB) error { //更新订单支付状态
	return config.DB.Model(&Order{}).Where("order_sn = ?", o.OrderSn).Update("pay_status", o.PayStatus).Error
}
func (o *Order) GetOrderList() (OrderList []*Order, err error) {
	err = config.DB.Where("pay_status = ?", o.PayStatus).Find(&OrderList).Error
	return OrderList, err
}
func (o *Order) CreateBargainOrder() error { //创建砍价订单
	return config.DB.Create(&o).Error
}
